Electron 进程间通信
Electron 应用中有两种进程:主进程和渲染进程,它们之间不能直接共享数据。
进程间通信(IPC)是一种在不同进程之间传递消息的机制,可以用来实现数据交换和功能调用。
Electron 提供了 ipcMain 和 ipcRenderer 模块来实现 IPC,它们分别运行在主进程和渲染进程中。
ipcMain 和 ipcRenderer 模块都有 send 和 on 方法,可以用来发送和监听异步消息;也有 invoke 和 handle 方法,可以用来发送和处理同步消息。
使用 IPC 时要注意避免循环依赖、内存泄漏、性能损耗等问题。
使用 remote 模块:渲染器进程调用主进程
具体参见:Electron remote 模块
使用 webContents.send():主进程向渲染器进程发送
主进程:
const openFile = (file) => {
const content = fs.readFileSync(file).toString();
mainWindow.webContents.send('file-opened', file, content);
}
渲染器继承中,使用 ipcRenderer 接收:
const { ipcRenderer } = require('electron');
ipcRenderer.on('file-opened', (event, file, content) => {
markdownView.value = content;
renderMarkdownToHtml(content);
});
渲染进程到主进程
- 渲染进程:使用 Electron ipcRenderer 的 send 发送。
- 主进程:使用 Electron ipcMain 的 on 接收。
渲染进程:
const setButton = document.getElementById('btn')
const titleInput = document.getElementById('title')
setButton.addEventListener('click', () => {
const title = titleInput.value
window.electronAPI.setTitle(title)
});
const { contextBridge, ipcRenderer } = require('electron')
contextBridge.exposeInMainWorld('electronAPI', {
setTitle: (title) => ipcRenderer.send('set-title', title)
})
main.js:
const { contextBridge, ipcRenderer } = require('electron')
contextBridge.exposeInMainWorld('electronAPI', {
setTitle: (title) => ipcRenderer.send('set-title', title)
})
网络资源
进程间通信 | Electron (electronjs.org)
本文作者:Maeiee
本文链接:Electron 进程间通信
版权声明:如无特别声明,本文即为原创文章,版权归 Maeiee 所有,未经允许不得转载!
喜欢我文章的朋友请随缘打赏,鼓励我创作更多更好的作品!